اصول پنج گانه SOLID در برنامه نویسی چیست ؟
لطفا بفرمایید
- اصول پنج گانه SOLID در برنامه نویسی چیست ؟
- این اصول در چه زبان هایی مورد استفاده قرار می گیره ؟
- در صورت رعایت کردن این اصول چه مزایایی خواهیم داشت ؟ و اگر رعایت نشه چه مشکلاتی پیش میاد؟
SOLID چیست ؟
اول ببینیم SOLID چی هست و چه کاری در نهایت قرار برامون انجام بده. SOLID به 5 اصل در طراحی شی گرا در نرم افزار گفته میشه که آقای رابرت سیسیل مارتین معرفی کرده. هدف از معرفی اصول SOLID اینه که برنامه نویس برای توسعه نرم افزار و یا نگهداری از برنامه و اشکال زدایی یا debug کار ساده تری داشته باشه.
نکته : دقت کنید استفاده از معماری ها و اصول پذیرفته شده در برنامه نویسی معمولا در پروژه های بزرگ ضروری به نظر میرسد. در پروژه های با اندازه کوچک به دلیل پیچیدگی های کمتر و وابستگی های کمتر در بخش های مختلف نرم افزار احساس نیاز به اصول و معماری ها دیده نمی شود.
SOLID مخفف چه کلماتی می باشد ؟
هر حرف از کلمه S.O.L.I.D مخفف یک عبارت و نشان دهنده یک اصل از اصول 5 گانه می باشد.
- S مخفف عبارت Single-responsiblity Principl می باشد. این اصل به ما می گوید هر کلاس در نرم افزار فقط و فقط باید یک وظیفه مشخص انجام دهد. در واقع یک کلاس نباید بیش از یک Job داشته باشد. (دقت کنید این اصل از اصول برنامه نویسی تمیز یا Clean Architecture هم می باشد.)
- O مخفف عبارت Open-closed Principle می باشد. این اصل به ما میگوید یک کلاس در نرم افزار باید برای گسترش باز شود ولی برای اصلاح بسته بماند. این یعنی یک کلاس باید بدون تغییر در خود کلاس قابل گسترش باشد.
مثال : برای درک بهتر این اصل فرض کنید 10 شکل دارید. مربع، مثلث، 5 ضلعی، 6 ضلعی و .... حالا می خواهید کلاسی بنویسید که مساحت یا محیط هر شکل را محاسبه کند. خب در این کلاس مطمئنا باید از If و else های زیادی استفاده کنید تا مشخص شود شکل شما چند ضلعی می باشد تا مساحت آن محاسبه شود. این اصل می گوید بهتر است این کلاس به کلاس های مختلفی بشنکد و مساحت یا محیط هر شکل در یک کلاس واحد محاسبه شود. در اینجا تعداد کلاس های شما افزایش پیدا می کند اما هر کلاس ساده تر و قابل فهم تر می شود.
- L مخفف عبارت Liskov Substitution Principle می باشد. این اصل مشخص می کنه که کلاس های فرزند در نرم افزار نباید باعث تغییر در کلاس پدر خود شوند. در واقع همیشه فرزندان از پدر خود به ارث میبرند نه بالعکس.
- I مخفف عبارت Interface Segregation Principle می باشد. این اصل (که به نظر خودم برای بهبود عملکرد نرم افزار لازمه) به ما میگه که یک کلاینت (کلاینت میتونه برنامه نویس باشه هنگام توسعه نرم افزارش یا حتی کاربر نهایی هنگام استفاده از نرم افزار یا حتی لایه Presentation برای استفاده از کلاس ها و اینترفیس های لایه های پایین تر) نباید از اینترفیس هایی استفاده کنه دارای متدها و توابعی باشه که هرگز در اون فضا بهش نیاز نداره. به عبارت ساده تر میشه گفت باید اینترفیس های بزرگ رو به اینترفیس های کوچکتر تبدیل کرد که وظیفه یا مجموعه وظایف خاصی رو دارن.
- D مخفف عبارت Dependency Inversion Principle می باشد. این اصل هم تقریبا همون مفهوم تزریق وابستگی یا Dependency Injection رو میرسونه. اگر بخوام یک مثال واضح تر بزنم میگه توابع و متدها باید مستقل از دیتابیس کار کنن. (این مفهوم هم در برنامه نویسی با معماری DDD یا Domain Driven Design معرفی شده.)
اصول SOLID در چه زبانهایی قابل پیاده سازی می باشد؟
تقریبا در همه زبان های برنامه نویسی رایج میشه از اصول SOLID استفاده کرد. در اینجا لازم میدونم چند نکته رو در رابطه با اصول SOLID بهتون بگم :
- استفاده از اصول SOLID یا هر معماری دیگه ای مثل معماری تمیز اجباری نیست. این ها همه پیشنهاد هست. در واقع این اصول پیشنهادهایی برای افزایش بهره وری و ساده کردن کار برنامه نویس هست. ممکنه در برخی پروژه ها استفاده از این اصول مناسب باشه و در برخی پروژه ها هم مناسب نباشه.
- استفاده از این اصول گرچه باعث ساده تر شدن کار میشه اما گاهی پیاده سازی چنین اصولی پیچیدگی های زیادی به همراه خواهد داشت و عملا استفاده نکردن از این اصول میتونه بهینه تر باشه.
- خیلی از این اصول استباطی هست. یعنی ممکنه نحوه پیاده سازی شما با برنامه نویس دیگری متفاوت باشه. در واقع دو استنباط مختلف از یک کار واحد داشته باشید.
- زبان های برنامه نویسی مختلف روش های مختلفی رو برای کارهای مختلف ارائه میدن. ممکنه مثلا پیاده سازی این اصول در PHP با ASP متفاوت باشه. در واقع قرار نیست همه زبان ها و همه برنامه نویسان یک سورس دقیقا یکسان برای یک پروژه داشته باشن.
منبع : SOLID: The First 5 Principles of Object Oriented Design
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- نمایش صفحه در پنجره جدید با کلیک روی لینک (تگ a) در Asp
- افزودن مقادیر به صورت دستی به List دریافت شده از ریپازیتوری
- بهترین سایتها برای تمرین آنلاین برنامه نویسی چیست ؟
- نگهداری و نمایش تاریخچه ویرایش متن در Word
- فرق بین Senior Developer و Junior Developer چیست ؟
- Agile چیست ؟ مدیریت پروژه با روش Agile در برنامه نویسی چگونه است ؟
- فرق زبان های برنامه نویسی سطح بالا و سطح پایین چیست ؟
- معرفی آموزش برای Power BI و Data Warehouse
- چت GBT چیست ؟ نمونه مشابه ChatGBT وجود داره ؟
- آیا یادگیری سی شارپ به طور حرفه ای آینده شغلی خوبی داره ؟